package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpSocBackRecordRecordDAO;
import org.jsola.hr.dto.EmpSocBackRecordRecordAddDTO;
import org.jsola.hr.dto.EmpSocBackRecordRecordUpdateDTO;
import org.jsola.hr.dto.SocBackRecordImportDTO;
import org.jsola.hr.entity.EmpSocBackRecordRecordDO;
import org.jsola.hr.query.EmpSocBackRecordInfoQuery;
import org.jsola.hr.query.EmpSocBackRecordRecordQuery;
import org.jsola.hr.vo.EmpSocBackRecordRecordListVO;
import org.jsola.hr.vo.EmpSocBackRecordRecordVO;
import org.jsola.hr.vo.ImportExcelResultListVO;
import org.jsola.user.core.TokenUser;

import java.io.File;
import java.util.List;


/**
 * 社保回款记录
 *
 * @author zhr
 */
public interface IEmpSocBackRecordRecordService extends IService<IEmpSocBackRecordRecordDAO, EmpSocBackRecordRecordDO> {

    /**
     * 新增社保回款记录
     *
     * @param empSocBackRecordRecordAddDTO 新增社保回款记录DTO
     * @param tokenUser                    当前用户
     * @return 社保回款记录详情信息
     */
    EmpSocBackRecordRecordVO save(EmpSocBackRecordRecordAddDTO empSocBackRecordRecordAddDTO, TokenUser tokenUser);

    /**
     * 新增社保回款记录(批量)
     *
     * @param empSocBackRecordRecords 新增社保回款记录DTO
     * @param tokenUser               当前用户
     * @return 社保回款记录详情信息
     */
    Integer saveBatch(EmpSocBackRecordRecordAddDTO[] empSocBackRecordRecords, TokenUser tokenUser);


    /**
     * 修改社保回款记录
     *
     * @param empSocBackRecordRecordUpdateDTO 修改社保回款记录DTO
     * @param tokenUser                       当前用户
     * @return 更新数量
     */
    int update(EmpSocBackRecordRecordUpdateDTO empSocBackRecordRecordUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除社保回款记录，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser                 当前用户
     * @param empSocBackRecordRecordIds 社保回款记录id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... empSocBackRecordRecordIds);

    /**
     * 根据社保回款记录id查找
     *
     * @param empSocBackRecordRecordId 社保回款记录id
     * @param siteId                   所属站点id
     * @return 社保回款记录详情信息
     */
    EmpSocBackRecordRecordVO selectById(String empSocBackRecordRecordId, String siteId);

    /**
     * 查询社保回款记录
     *
     * @param empSocBackRecordRecordQuery 查询条件
     * @param siteId                      所属站点id
     * @return 社保回款记录列表信息
     */
    List<EmpSocBackRecordRecordListVO> select(EmpSocBackRecordRecordQuery empSocBackRecordRecordQuery, String siteId);

    /**
     * 查询社保回款记录记录数
     *
     * @param empSocBackRecordRecordQuery 查询条件
     * @param siteId                      所属站点id
     * @return 社保回款记录记录数
     */
    int selectCount(EmpSocBackRecordRecordQuery empSocBackRecordRecordQuery, String siteId);

    /**
     * 分页查询社保回款记录
     *
     * @param empSocBackRecordRecordQuery 查询条件
     * @param siteId                      所属站点id
     * @return 社保回款记录列表信息
     */
    Page<EmpSocBackRecordRecordListVO> selectPage(EmpSocBackRecordRecordQuery empSocBackRecordRecordQuery, String siteId);


    /**
     * 根据社保回款记录id查找
     *
     * @param empSocBackRecordRecordId 社保回款记录id
     * @param siteId                   所属站点id
     * @return 社保回款记录
     */
    EmpSocBackRecordRecordDO selectDOById(String empSocBackRecordRecordId, String siteId);

    /**
     * 查询社保回款记录
     *
     * @param empSocBackRecordRecordQuery 查询条件
     * @param siteId                      所属站点id
     * @return 社保回款记录列表
     */
    List<EmpSocBackRecordRecordDO> selectDO(EmpSocBackRecordRecordQuery empSocBackRecordRecordQuery, String siteId);

    /**
     * 根据empId、年、月 查询社保回款记录
     *
     * @param empId  员工id
     * @param year   年
     * @param month  月
     * @param siteId 所属站点id
     * @return 社保回款记录列表
     */
    List<EmpSocBackRecordRecordVO> selectByEmpIdAndYearAndMonth(String empId, String year, String month, String siteId);

    /**
     * 导入回款
     *
     * @param file      文件
     * @param query     参数
     * @param tokenUser 当前用户
     * @return 导入结果
     */
    ImportExcelResultListVO<SocBackRecordImportDTO> importRecord(File file, EmpSocBackRecordInfoQuery query,
                                                                 TokenUser tokenUser);

    /**
     * 导入回款计划入库
     *
     * @param importList 入库数据
     * @param tokenUser  当前用户
     */
    void saveImportRecord(List<SocBackRecordImportDTO> importList, TokenUser tokenUser);

    /**
     * 导入回款计划错误数据导出
     *
     * @param errorInfo 错误数据
     * @return 文件路径
     */
    String errorInfoExport(ImportExcelResultListVO<SocBackRecordImportDTO> errorInfo);
}


